#include <iostream>
using namespace std;

#define mx(a,b)   a>b?a:b
#define mx1(a,b) (a>b?a:b)
#define mx2(a,b) ((a)>(b)?(a):(b))
inline int mx3(int a, int b){ return a > b ? a : b; }

template<typename T>
inline T mx4(T a, T b){ return a > b ? a : b; }

template<typename T>
inline const T& mx5(const T& a, const T& b){ return a > b ? a : b; }

int main() {
  // cout << mx(2+2,3) << endl; // 编译错误
  { int x = 2; cout << mx1(x+=2,3) << endl; }
  { int x = 2; cout << mx2(x+=2,3) << endl; }
  { int x = 2; cout << mx3(x+=2,3) << endl; }
  { int x = 2; cout << mx4(x+=2,3) << endl; }
  { int x = 2; cout << mx5(x+=2,3) << endl; }
}
